home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 (Walnut Creek) / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / midi / casio / part01 / timer.c < prev   
C/C++ Source or Header  |  1991-03-28  |  2KB  |  89 lines

  1. /* casio reader timer stuff */
  2.  
  3. #include <stdio.h>
  4. #include <exec/types.h>
  5. #include <functions.h>
  6. #include <intuition/intuition.h>
  7. #include <devices/timer.h>
  8. #include <devices/audio.h>
  9.  
  10. #include "prototypes.h"
  11.  
  12. struct timerequest *timer_request;
  13.  
  14. struct Device *TimerBase;
  15.  
  16. struct timerequest *CreateTimer(int unit)
  17. {
  18.     long error;
  19.  
  20.     register struct MsgPort *timerport;
  21.     register struct timerequest *timermsg;
  22.  
  23.     timerport = CreatePort(0L, 0L);
  24.  
  25.     if (!timerport)
  26.         return 0;
  27.  
  28.     timermsg =  (struct timerequest *)CreateExtIO(timerport, (long)sizeof(struct timerequest));
  29.  
  30.     if (!timermsg) 
  31.     {
  32.         DeletePort(timerport);
  33.         return 0;
  34.     }
  35.  
  36.     error = OpenDevice(TIMERNAME, (long)unit, timermsg, 0L);
  37.     if (error)
  38.     {
  39.         DeleteTimer(timermsg);
  40.         return 0;
  41.     }
  42.     return timermsg;
  43. }
  44.  
  45. DeleteTimer(register struct timerequest *tr)
  46. {
  47.     register struct MsgPort *tp;
  48.  
  49.     if (tr) 
  50.     {
  51.         tp = tr->tr_node.io_Message.mn_ReplyPort;
  52.         if(tp)
  53.             DeletePort(tp);
  54.         CloseDevice((struct IORequest *)tr);
  55.         DeleteExtIO((struct IORequest *)tr);
  56.     }
  57. }
  58.  
  59. void trash_timer(void)
  60. {
  61.     AbortIO((struct IORequest *)timer_request);
  62.     TimerBase = (struct Device *)-1;
  63.     DeleteTimer(timer_request);
  64. }
  65.  
  66. void init_timer(void)
  67. {
  68.     if (!(timer_request = CreateTimer(UNIT_MICROHZ)))
  69.         panic("Can't create timer.");
  70.  
  71.     TimerBase = timer_request->tr_node.io_Device;
  72.     add_cleanup(trash_timer);
  73. }
  74.  
  75. void start_timeout_timer(void)
  76. {
  77.     timer_request->tr_node.io_Command = TR_ADDREQUEST;
  78.  
  79.     timer_request->tr_time.tv_secs = 3;
  80.     timer_request->tr_time.tv_micro = 0;
  81.  
  82.     SendIO((struct IORequest *)timer_request);
  83. }
  84.  
  85. void abort_timeout_timer(void)
  86. {
  87.     AbortIO((struct IORequest *)timer_request);
  88. }
  89.